package com.example.entity;

import lombok.Data;

import java.util.List;

/**
 * 权限信息封装类
 * <p>
 * 用于描述系统权限体系结构，包含权限层级、名称及关联的模块操作权限
 * </p>
 */
@Data
public class AuthorityInfo {
    /**
     * 权限级别（数值越小权限越高）
     * 示例值：
     * - 0：系统级权限
     * - 1：管理级权限
     * - 2：用户级权限
     */
    private Integer level;

    /**
     * 权限名称（唯一标识）
     * 示例值："系统管理员"、"文件查看者"
     * 数据库约束：UNIQUE NOT NULL
     */
    private String name;

    /**
     * 关联的模块权限列表
     * 说明：每个Module对象描述一个业务模块的细粒度权限
     * 示例：包含用户管理模块的增删改查权限
     */
    private List<Model> models;

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Model> getModels() {
        return models;
    }

    public void setModels(List<Model> models) {
        this.models = models;
    }

    /**
     * 模块级权限信息
     * <p>
     * 描述具体业务模块的细粒度操作权限
     * </p>
     */
    public static class Model {
        /**
         * 模块标识ID
         */
        private Integer modelId;

        /**
         * 允许的操作权限列表
         * 示例值：
         * - [1,2,3]：对应增删改操作
         * - [5]：仅查看权限
         * 操作定义：
         * 1-新增 2-删除 3-修改 4-查询 5-导出...
         */
        private List<Integer> operation;


        /**
         * 获取模块标识ID
         *
         * @return 模块唯一标识
         */
        public Integer getModelId() {
            return modelId;
        }

        /**
         * 设置模块标识ID
         *
         * @param modelId 模块唯一标识
         */
        public void setModelId(Integer modelId) {
            this.modelId = modelId;
        }

        /**
         * 获取允许的操作列表
         *
         * @return 操作权限编码列表（空列表表示无权限）
         */
        public List<Integer> getOperation() {
            return operation;
        }

        /**
         * 设置允许的操作列表
         *
         * @param operation 操作权限编码集合
         */
        public void setOperation(List<Integer> operation) {
            this.operation = operation;
        }
    }
}
